home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2007 December / PCWKCD1207B.iso / + TYLKO W WERSJI CYFROWEJ + / PCWK_PROG / Source / 120 / ukryte1 / fukryte1.cpp next >
C/C++ Source or Header  |  2007-07-05  |  5KB  |  169 lines

  1. //
  2. //  Andrzej Stasiewicz, czerwiec, 2007
  3. //  Ukrywanie obrazu w obrazie
  4. //
  5. //---------------------------------------------------------------------------
  6. #include <vcl.h>
  7. #pragma hdrstop
  8.  
  9. #include "fukryte1.h"
  10. //---------------------------------------------------------------------------
  11. #pragma package(smart_init)
  12. #pragma resource "*.dfm"
  13. TForm1 *Form1;
  14. //---------------------------------------------------------------------------
  15. __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
  16. {
  17. }
  18. //---------------------------------------------------------------------------
  19. //  Odczyt pliku, wy£wietlenie z lewej strony i wyr≤wnanie parametr≤w
  20. //  obydwu obraz≤w
  21. void __fastcall TForm1::Button1Click(TObject *Sender)
  22. {
  23.  if( OpenPictureDialog1 -> Execute())
  24.  {
  25.     Image1 -> Picture -> LoadFromFile( OpenPictureDialog1 -> FileName);
  26.     Image1 -> Picture -> Bitmap -> PixelFormat = pf32bit;
  27.     Image2 -> Picture -> Bitmap -> PixelFormat = pf32bit;
  28.     Image2 -> Picture -> Bitmap -> Width = Image1 -> Picture -> Bitmap -> Width;    
  29.     Image2 -> Picture -> Bitmap -> Height = Image1 -> Picture -> Bitmap -> Height;
  30.  }    
  31. }
  32. //---------------------------------------------------------------------------
  33. //  Zapis obrazka do pliku
  34. void __fastcall TForm1::Button3Click(TObject *Sender)
  35. {
  36.  if( SavePictureDialog1 -> Execute())
  37.  {
  38.     Image2 -> Picture -> SaveToFile( SavePictureDialog1 -> FileName);
  39.  }    
  40. }
  41. //---------------------------------------------------------------------------
  42. //  Wyzerowanie okre£lonej liczby bit≤w w kana│ach R, G, B
  43. void __fastcall TForm1::Button2Click(TObject *Sender)
  44. {
  45.  int il_r = Edit1 -> Text.ToInt(),
  46.      il_g = Edit2 -> Text.ToInt(),
  47.      il_b = Edit3 -> Text.ToInt();
  48.  
  49.  int i, j, n, szer, wys;
  50.  TColor k;
  51.  unsigned char r, g, b;
  52.  
  53.  szer = Image2 -> Picture -> Bitmap -> Width;
  54.  wys  = Image2 -> Picture -> Bitmap -> Height;
  55.  for( i = 0; i < szer; ++i)
  56.  {
  57.     for( j = 0; j < wys; ++j)
  58.     {
  59.         k = Image1 -> Picture -> Bitmap -> Canvas -> Pixels[ i][ j];
  60.         r = GetRValue( k);
  61.         g = GetGValue( k);
  62.         b = GetBValue( k);
  63.  
  64.         for( n = 0; n < il_r; ++n)
  65.             r = ustaw_bit( r, n, 0);
  66.  
  67.         for( n = 0; n < il_g; ++n)
  68.             g = ustaw_bit( g, n, 0);
  69.  
  70.         for( n = 0; n < il_b; ++n)
  71.             b = ustaw_bit( b, n, 0);
  72.  
  73.         Image2 -> Picture -> Bitmap -> Canvas -> Pixels[ i][ j] = RGB( r, g, b);
  74.     }
  75.  }
  76. }
  77. //---------------------------------------------------------------------------
  78. //  wpisywanie jedynek
  79. void __fastcall TForm1::Button4Click(TObject *Sender)
  80. {
  81.  int il_r = Edit1 -> Text.ToInt(),
  82.      il_g = Edit2 -> Text.ToInt(),
  83.      il_b = Edit3 -> Text.ToInt();
  84.  
  85.  int i, j, n, szer, wys;
  86.  TColor k;
  87.  unsigned char r, g, b;
  88.  
  89.  szer = Image2 -> Picture -> Bitmap -> Width;
  90.  wys  = Image2 -> Picture -> Bitmap -> Height;
  91.  for( i = 0; i < szer; ++i)
  92.  {
  93.     for( j = 0; j < wys; ++j)
  94.     {
  95.         k = Image1 -> Picture -> Bitmap -> Canvas -> Pixels[ i][ j];
  96.         r = GetRValue( k);
  97.         g = GetGValue( k);
  98.         b = GetBValue( k);
  99.  
  100.         for( n = 0; n < il_r; ++n)
  101.             r = ustaw_bit( r, n, 1);
  102.  
  103.         for( n = 0; n < il_g; ++n)
  104.             g = ustaw_bit( g, n, 1);
  105.  
  106.         for( n = 0; n < il_b; ++n)
  107.             b = ustaw_bit( b, n, 1);
  108.  
  109.         Image2 -> Picture -> Bitmap -> Canvas -> Pixels[ i][ j] = RGB( r, g, b);
  110.     }
  111.  }
  112. }
  113. //---------------------------------------------------------------------------
  114. //  Randomizowanie bit≤w
  115. void __fastcall TForm1::Button5Click(TObject *Sender)
  116. {
  117.  int il_r = Edit1 -> Text.ToInt(),
  118.      il_g = Edit2 -> Text.ToInt(),
  119.      il_b = Edit3 -> Text.ToInt();
  120.  
  121.  int i, j, n, szer, wys;
  122.  TColor k;
  123.  unsigned char r, g, b;
  124.  
  125.  szer = Image2 -> Picture -> Bitmap -> Width;
  126.  wys  = Image2 -> Picture -> Bitmap -> Height;
  127.  for( i = 0; i < szer; ++i)
  128.  {
  129.     for( j = 0; j < wys; ++j)
  130.     {
  131.         k = Image1 -> Picture -> Bitmap -> Canvas -> Pixels[ i][ j];
  132.         r = GetRValue( k);
  133.         g = GetGValue( k);
  134.         b = GetBValue( k);
  135.  
  136.         for( n = 0; n < il_r; ++n)
  137.             r = ustaw_bit( r, n, random( 2));
  138.  
  139.         for( n = 0; n < il_g; ++n)
  140.             g = ustaw_bit( g, n, random( 2));
  141.  
  142.         for( n = 0; n < il_b; ++n)
  143.             b = ustaw_bit( b, n, random( 2));
  144.  
  145.         Image2 -> Picture -> Bitmap -> Canvas -> Pixels[ i][ j] = RGB( r, g, b);
  146.     }
  147.  }
  148.     
  149. }
  150. //---------------------------------------------------------------------------
  151. //  Funkcja elementarna.
  152. //  W bajcie 'bajt' nadaj bitowi 'poz' wartosc 'bit'
  153. unsigned char TForm1 :: ustaw_bit( unsigned char bajt, int poz, int bit)
  154. {
  155.  unsigned char maska[ 8] = {1, 2, 4, 8, 16, 32, 64, 128};   //'1', '10', '100', '1000', ...
  156.  
  157.  if( bit == 1)          //wpisywanie jedynki
  158.  {
  159.     bajt = bajt | maska[ poz];
  160.  }
  161.  else
  162.  {
  163.     bajt = bajt & (~maska[ poz]);
  164.  }
  165.  return bajt;
  166. }
  167. //---------------------------------------------------------------------------
  168.  
  169.